#include <cuda_runtime.h>
#include <curand_kernel.h>
#include <thrust/device_vector.h>
#include <thrust/transform.h>
#include <curand_philox4x32_x.h>
#include <curand.h>

void random_setup(curandStatePhilox4_32_10_t *d_state, unsigned long long seed, int H, int W,int BLOSIZE,cudaStream_t stream);
void ProcessFirstFrame(float* gray, float* samples, curandStatePhilox4_32_10_t* d_state, const int* offset, int num_samples, int H, int W, int BLOSIZE,cudaStream_t stream);
void ProcessNextFrame(float* gray, float* samples, int* img_count, int* target_hit_count, int* d_mask_img, curandStatePhilox4_32_10_t* d_state, int* offset, int H, int W, int min_match, int random_sample, int num_samples, int maxhitcount,int BLOSIZE,cudaStream_t stream);
void Init_Matarix(float* samples,int* img_count,int* target_hit_count,int* img_mask,int num_samples,int H,int W,int BLOSIZE,cudaStream_t stream);
void Reset_Matarix(int*img_count,int* img_mask,int H,int W,int BLOSIZE,cudaStream_t stream);


